if (!GDK_SURFACE_DESTROYED (surface))
{
- if (GDK_SURFACE_TYPE (surface) != GDK_SURFACE_FOREIGN)
- {
- g_warning ("losing last reference to undestroyed surface");
- _gdk_surface_destroy (surface, FALSE);
- }
- else
- /* We use TRUE here, to keep us from actually calling
- * XDestroyWindow() on the window
- */
- _gdk_surface_destroy (surface, TRUE);
+ g_warning ("losing last reference to undestroyed surface");
+ _gdk_surface_destroy (surface, FALSE);
}
if (surface->impl)
#endif
break;
case GDK_SURFACE_CHILD:
- if (GDK_SURFACE_TYPE (parent) == GDK_SURFACE_FOREIGN)
- {
- g_warning (G_STRLOC "Child surfaces must not be created as children of\n"
- "a surface of type GDK_SURFACE_FOREIGN");
- return NULL;
- }
break;
default:
g_warning (G_STRLOC "cannot make surfaces of type %d", surface->surface_type);
case GDK_SURFACE_TOPLEVEL:
case GDK_SURFACE_CHILD:
case GDK_SURFACE_TEMP:
- case GDK_SURFACE_FOREIGN:
case GDK_SURFACE_SUBSURFACE:
- if (surface->surface_type == GDK_SURFACE_FOREIGN && !foreign_destroy)
- {
- }
- else
+ if (surface->parent)
{
- if (surface->parent)
- {
- if (surface->parent->children)
- surface->parent->children = g_list_remove_link (surface->parent->children, &surface->children_list_node);
+ if (surface->parent->children)
+ surface->parent->children = g_list_remove_link (surface->parent->children, &surface->children_list_node);
- if (!recursing &&
- GDK_SURFACE_IS_MAPPED (surface))
- {
- recompute_visible_regions (surface, FALSE);
- gdk_surface_invalidate_in_parent (surface);
- }
- }
-
- if (surface->gl_paint_context)
+ if (!recursing &&
+ GDK_SURFACE_IS_MAPPED (surface))
{
- /* Make sure to destroy if current */
- g_object_run_dispose (G_OBJECT (surface->gl_paint_context));
- g_object_unref (surface->gl_paint_context);
- surface->gl_paint_context = NULL;
+ recompute_visible_regions (surface, FALSE);
+ gdk_surface_invalidate_in_parent (surface);
}
+ }
- if (surface->frame_clock)
- {
- g_object_run_dispose (G_OBJECT (surface->frame_clock));
- gdk_surface_set_frame_clock (surface, NULL);
- }
+ if (surface->gl_paint_context)
+ {
+ /* Make sure to destroy if current */
+ g_object_run_dispose (G_OBJECT (surface->gl_paint_context));
+ g_object_unref (surface->gl_paint_context);
+ surface->gl_paint_context = NULL;
+ }
- if (surface->surface_type == GDK_SURFACE_FOREIGN)
- g_assert (surface->children == NULL);
- else
- {
- tmp = surface->children;
- surface->children = NULL;
- /* No need to free children list, its all made up of in-struct nodes */
+ if (surface->frame_clock)
+ {
+ g_object_run_dispose (G_OBJECT (surface->frame_clock));
+ gdk_surface_set_frame_clock (surface, NULL);
+ }
- while (tmp)
- {
- temp_surface = tmp->data;
- tmp = tmp->next;
-
- if (temp_surface)
- _gdk_surface_destroy_hierarchy (temp_surface,
- TRUE,
- recursing_native || gdk_surface_has_impl (surface),
- foreign_destroy);
- }
- }
+ tmp = surface->children;
+ surface->children = NULL;
+ /* No need to free children list, its all made up of in-struct nodes */
- _gdk_surface_clear_update_area (surface);
+ while (tmp)
+ {
+ temp_surface = tmp->data;
+ tmp = tmp->next;
+
+ if (temp_surface)
+ _gdk_surface_destroy_hierarchy (temp_surface,
+ TRUE,
+ recursing_native || gdk_surface_has_impl (surface),
+ foreign_destroy);
+ }
- impl_class = GDK_SURFACE_IMPL_GET_CLASS (surface->impl);
+ _gdk_surface_clear_update_area (surface);
- if (gdk_surface_has_impl (surface))
- impl_class->destroy (surface, recursing_native, foreign_destroy);
- else
- {
- /* hide to make sure we repaint and break grabs */
- gdk_surface_hide (surface);
- }
+ impl_class = GDK_SURFACE_IMPL_GET_CLASS (surface->impl);
- surface->state |= GDK_SURFACE_STATE_WITHDRAWN;
- surface->parent = NULL;
- surface->destroyed = TRUE;
+ if (gdk_surface_has_impl (surface))
+ impl_class->destroy (surface, recursing_native, foreign_destroy);
+ else
+ {
+ /* hide to make sure we repaint and break grabs */
+ gdk_surface_hide (surface);
+ }
- surface_remove_from_pointer_info (surface, display);
+ surface->state |= GDK_SURFACE_STATE_WITHDRAWN;
+ surface->parent = NULL;
+ surface->destroyed = TRUE;
- g_object_notify_by_pspec (G_OBJECT (surface), properties[PROP_STATE]);
- }
+ surface_remove_from_pointer_info (surface, display);
+
+ g_object_notify_by_pspec (G_OBJECT (surface), properties[PROP_STATE]);
break;
}
}
{
gboolean viewable;
- if (surface->surface_type == GDK_SURFACE_FOREIGN)
- viewable = TRUE;
- else if (gdk_surface_is_toplevel (surface) ||
- surface->parent->viewable)
+ if (gdk_surface_is_toplevel (surface) ||
+ surface->parent->viewable)
viewable = GDK_SURFACE_IS_MAPPED (surface);
else
viewable = FALSE;
GdkDevice *device,
GdkCursor *cursor)
{
+ GdkPointerSurfaceInfo *pointer_info;
+ GdkDisplay *display;
+
if (GDK_SURFACE_DESTROYED (surface))
return;
g_assert (gdk_surface_get_display (surface) == gdk_device_get_display (device));
- if (surface->surface_type == GDK_SURFACE_FOREIGN)
- GDK_DEVICE_GET_CLASS (device)->set_surface_cursor (device, surface, cursor);
- else
- {
- GdkPointerSurfaceInfo *pointer_info;
- GdkDisplay *display;
-
- display = gdk_surface_get_display (surface);
- pointer_info = _gdk_display_get_pointer_info (display, device);
+ display = gdk_surface_get_display (surface);
+ pointer_info = _gdk_display_get_pointer_info (display, device);
- if (_gdk_surface_event_parent_of (surface, pointer_info->surface_under_pointer))
- update_cursor (display, device);
- }
+ if (_gdk_surface_event_parent_of (surface, pointer_info->surface_under_pointer))
+ update_cursor (display, device);
}
/**
case GDK_SURFACE_TEMP: /* ? */
g_object_notify (G_OBJECT (surface), "state");
break;
- case GDK_SURFACE_FOREIGN:
case GDK_SURFACE_CHILD:
default:
break;
static gboolean _gdk_surface_get_functions (GdkSurface *window,
GdkWMFunction *functions);
-#define SURFACE_IS_TOPLEVEL(window) \
- (GDK_SURFACE_TYPE (window) != GDK_SURFACE_FOREIGN)
-
struct _GdkWin32Surface {
GdkSurface parent;
};
/* The common code warns for this case. */
hparent = GetDesktopWindow ();
}
- /* Children of foreign windows aren't toplevel windows */
- if (real_parent != NULL && GDK_SURFACE_TYPE (real_parent) == GDK_SURFACE_FOREIGN)
- {
- dwStyle = WS_CHILDWINDOW | WS_CLIPCHILDREN;
- }
+ /* MSDN: We need WS_CLIPCHILDREN and WS_CLIPSIBLINGS for GL Context Creation */
+ if (window->surface_type == GDK_SURFACE_TOPLEVEL)
+ dwStyle = WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS;
else
- {
- /* MSDN: We need WS_CLIPCHILDREN and WS_CLIPSIBLINGS for GL Context Creation */
- if (window->surface_type == GDK_SURFACE_TOPLEVEL)
- dwStyle = WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS;
- else
- dwStyle = WS_OVERLAPPED | WS_MINIMIZEBOX | WS_SYSMENU | WS_CAPTION | WS_THICKFRAME | WS_CLIPCHILDREN;
+ dwStyle = WS_OVERLAPPED | WS_MINIMIZEBOX | WS_SYSMENU | WS_CAPTION | WS_THICKFRAME | WS_CLIPCHILDREN;
- offset_x = _gdk_offset_x;
- offset_y = _gdk_offset_y;
- }
+ offset_x = _gdk_offset_x;
+ offset_y = _gdk_offset_y;
break;
case GDK_SURFACE_TEMP:
x = y = CW_USEDEFAULT;
}
else
- {
- /* TEMP, FOREIGN: Put these where requested */
+ {
+ /* TEMP: Put these where requested */
x = real_x;
y = real_y;
}
if (!GDK_SURFACE_DESTROYED (window))
{
- if (GDK_SURFACE_TYPE (window) != GDK_SURFACE_FOREIGN)
- g_warning ("window %p unexpectedly destroyed",
- GDK_SURFACE_HWND (window));
+ g_warning ("window %p unexpectedly destroyed",
+ GDK_SURFACE_HWND (window));
_gdk_surface_destroy (window, TRUE);
}
out:
surface_impl->inhibit_configure = FALSE;
- if (SURFACE_IS_TOPLEVEL (window))
- _gdk_win32_emit_configure_event (window);
+ _gdk_win32_emit_configure_event (window);
}
static void
if (GDK_SURFACE_DESTROYED (window))
return FALSE;
- /* only toplevels can be layered */
- if (!SURFACE_IS_TOPLEVEL (window))
- return FALSE;
-
impl = GDK_SURFACE_IMPL_WIN32 (window->impl);
/* This is because GTK calls gdk_surface_set_decorations (window, 0),
g_return_if_fail (GDK_IS_SURFACE (window));
- if (!SURFACE_IS_TOPLEVEL (window) || GDK_SURFACE_DESTROYED (window))
+ if (GDK_SURFACE_DESTROYED (window))
return;
if (opacity < 0)
static void gdk_surface_impl_x11_finalize (GObject *object);
-#define SURFACE_IS_TOPLEVEL_OR_FOREIGN(surface) \
- (GDK_SURFACE_TYPE (surface) == GDK_SURFACE_TOPLEVEL || \
- GDK_SURFACE_TYPE (surface) == GDK_SURFACE_TEMP || \
- GDK_SURFACE_TYPE (surface) == GDK_SURFACE_FOREIGN)
-
#define SURFACE_IS_TOPLEVEL(surface) \
(GDK_SURFACE_TYPE (surface) == GDK_SURFACE_TOPLEVEL || \
GDK_SURFACE_TYPE (surface) == GDK_SURFACE_TEMP)
if (!GDK_SURFACE_DESTROYED (surface))
{
- if (GDK_SURFACE_TYPE(surface) != GDK_SURFACE_FOREIGN)
- g_warning ("GdkSurface %#lx unexpectedly destroyed", GDK_SURFACE_XID (surface));
+ g_warning ("GdkSurface %#lx unexpectedly destroyed", GDK_SURFACE_XID (surface));
_gdk_surface_destroy (surface, TRUE);
}
gdk_surface_withdraw (surface);
return;
- case GDK_SURFACE_FOREIGN:
case GDK_SURFACE_CHILD:
default:
break;
_gdk_surface_update_size (surface);
toplevel = _gdk_x11_surface_get_toplevel (surface);
- if (toplevel && surface->surface_type != GDK_SURFACE_FOREIGN)
+ if (toplevel)
{
/* These are affected by surface scale: */
geom_mask = toplevel->last_geometry_hints_mask &
geom_mask);
}
- if (surface->surface_type == GDK_SURFACE_FOREIGN)
- XMoveWindow (GDK_SURFACE_XDISPLAY (surface),
- GDK_SURFACE_XID (surface),
- surface->x * impl->surface_scale,
- surface->y * impl->surface_scale);
- else
+ if (impl->override_redirect)
{
- if (impl->override_redirect)
- {
- impl->unscaled_width = surface->width * impl->surface_scale;
- impl->unscaled_height = surface->height * impl->surface_scale;
- }
-
- XResizeWindow (GDK_SURFACE_XDISPLAY (surface),
- GDK_SURFACE_XID (surface),
- surface->width * impl->surface_scale,
- surface->height * impl->surface_scale);
+ impl->unscaled_width = surface->width * impl->surface_scale;
+ impl->unscaled_height = surface->height * impl->surface_scale;
}
+ XResizeWindow (GDK_SURFACE_XDISPLAY (surface),
+ GDK_SURFACE_XID (surface),
+ surface->width * impl->surface_scale,
+ surface->height * impl->surface_scale);
+
gdk_surface_invalidate_rect (surface, NULL);
}
g_return_if_fail (GDK_IS_SURFACE (surface));
if (GDK_SURFACE_DESTROYED (surface) ||
- !SURFACE_IS_TOPLEVEL_OR_FOREIGN (surface))
+ !SURFACE_IS_TOPLEVEL (surface))
return;
display = GDK_SURFACE_DISPLAY (surface);
Atom atom;
if (GDK_SURFACE_DESTROYED (surface) ||
- !SURFACE_IS_TOPLEVEL_OR_FOREIGN (surface))
+ !SURFACE_IS_TOPLEVEL (surface))
return;
display = gdk_surface_get_display (surface);
g_return_val_if_fail (GDK_IS_SURFACE (surface), GDK_SURFACE_TYPE_HINT_NORMAL);
if (GDK_SURFACE_DESTROYED (surface) ||
- !SURFACE_IS_TOPLEVEL_OR_FOREIGN (surface))
+ !SURFACE_IS_TOPLEVEL (surface))
return GDK_SURFACE_TYPE_HINT_NORMAL;
type = GDK_SURFACE_TYPE_HINT_NORMAL;
gboolean modal)
{
if (GDK_SURFACE_DESTROYED (surface) ||
- !SURFACE_IS_TOPLEVEL_OR_FOREIGN (surface))
+ !SURFACE_IS_TOPLEVEL (surface))
return;
surface->modal_hint = modal;
g_return_if_fail (GDK_SURFACE_TYPE (surface) != GDK_SURFACE_CHILD);
if (GDK_SURFACE_DESTROYED (surface) ||
- !SURFACE_IS_TOPLEVEL_OR_FOREIGN (surface))
+ !SURFACE_IS_TOPLEVEL (surface))
return;
toplevel = _gdk_x11_surface_get_toplevel (surface);
g_return_if_fail (GDK_SURFACE_TYPE (surface) != GDK_SURFACE_CHILD);
if (GDK_SURFACE_DESTROYED (surface) ||
- !SURFACE_IS_TOPLEVEL_OR_FOREIGN (surface))
+ !SURFACE_IS_TOPLEVEL (surface))
return;
toplevel = _gdk_x11_surface_get_toplevel (surface);
g_return_if_fail (GDK_SURFACE_TYPE (surface) != GDK_SURFACE_CHILD);
if (GDK_SURFACE_DESTROYED (surface) ||
- !SURFACE_IS_TOPLEVEL_OR_FOREIGN (surface))
+ !SURFACE_IS_TOPLEVEL (surface))
return;
toplevel = _gdk_x11_surface_get_toplevel (surface);
GdkToplevelX11 *toplevel;
if (GDK_SURFACE_DESTROYED (surface) ||
- !SURFACE_IS_TOPLEVEL_OR_FOREIGN (surface))
+ !SURFACE_IS_TOPLEVEL (surface))
return;
toplevel = _gdk_x11_surface_get_toplevel (surface);
*geom_mask = 0;
if (GDK_SURFACE_DESTROYED (surface) ||
- !SURFACE_IS_TOPLEVEL_OR_FOREIGN (surface))
+ !SURFACE_IS_TOPLEVEL (surface))
return;
impl = GDK_SURFACE_IMPL_X11 (surface->impl);
g_return_if_fail (title != NULL);
if (GDK_SURFACE_DESTROYED (surface) ||
- !SURFACE_IS_TOPLEVEL_OR_FOREIGN (surface))
+ !SURFACE_IS_TOPLEVEL (surface))
return;
display = gdk_surface_get_display (surface);
display = gdk_surface_get_display (surface);
if (GDK_SURFACE_DESTROYED (surface) ||
- !SURFACE_IS_TOPLEVEL_OR_FOREIGN (surface))
+ !SURFACE_IS_TOPLEVEL (surface))
return;
if (role)
display = gdk_surface_get_display (surface);
if (GDK_SURFACE_DESTROYED (surface) ||
- !SURFACE_IS_TOPLEVEL_OR_FOREIGN (surface))
+ !SURFACE_IS_TOPLEVEL (surface))
return;
if (startup_id)
GdkSurface *parent)
{
if (GDK_SURFACE_DESTROYED (surface) ||
- !SURFACE_IS_TOPLEVEL_OR_FOREIGN (surface))
+ !SURFACE_IS_TOPLEVEL (surface))
return;
/* XSetTransientForHint() doesn't allow unsetting, so do it manually */
surface->accept_focus = accept_focus;
if (!GDK_SURFACE_DESTROYED (surface) &&
- SURFACE_IS_TOPLEVEL_OR_FOREIGN (surface))
+ SURFACE_IS_TOPLEVEL (surface))
update_wm_hints (surface, FALSE);
}
}
if ((!GDK_SURFACE_DESTROYED (surface)) &&
(!surface->focus_on_map) &&
- SURFACE_IS_TOPLEVEL_OR_FOREIGN (surface))
+ SURFACE_IS_TOPLEVEL (surface))
gdk_x11_surface_set_user_time (surface, 0);
}
}
Window xid;
if (GDK_SURFACE_DESTROYED (surface) ||
- !SURFACE_IS_TOPLEVEL_OR_FOREIGN (surface))
+ !SURFACE_IS_TOPLEVEL (surface))
return;
display = gdk_surface_get_display (surface);
gint i, n;
if (GDK_SURFACE_DESTROYED (surface) ||
- !SURFACE_IS_TOPLEVEL_OR_FOREIGN (surface))
+ !SURFACE_IS_TOPLEVEL (surface))
return;
display = gdk_surface_get_display (surface);
GdkDisplay *display;
if (GDK_SURFACE_DESTROYED (surface) ||
- !SURFACE_IS_TOPLEVEL_OR_FOREIGN (surface))
+ !SURFACE_IS_TOPLEVEL (surface))
return;
display = gdk_surface_get_display (surface);
gdk_x11_surface_iconify (GdkSurface *surface)
{
if (GDK_SURFACE_DESTROYED (surface) ||
- !SURFACE_IS_TOPLEVEL_OR_FOREIGN (surface))
+ !SURFACE_IS_TOPLEVEL (surface))
return;
if (GDK_SURFACE_IS_MAPPED (surface))
gdk_x11_surface_deiconify (GdkSurface *surface)
{
if (GDK_SURFACE_DESTROYED (surface) ||
- !SURFACE_IS_TOPLEVEL_OR_FOREIGN (surface))
+ !SURFACE_IS_TOPLEVEL (surface))
return;
if (GDK_SURFACE_IS_MAPPED (surface))
gdk_x11_surface_stick (GdkSurface *surface)
{
if (GDK_SURFACE_DESTROYED (surface) ||
- !SURFACE_IS_TOPLEVEL_OR_FOREIGN (surface))
+ !SURFACE_IS_TOPLEVEL (surface))
return;
if (GDK_SURFACE_IS_MAPPED (surface))
gdk_x11_surface_unstick (GdkSurface *surface)
{
if (GDK_SURFACE_DESTROYED (surface) ||
- !SURFACE_IS_TOPLEVEL_OR_FOREIGN (surface))
+ !SURFACE_IS_TOPLEVEL (surface))
return;
if (GDK_SURFACE_IS_MAPPED (surface))
gdk_x11_surface_maximize (GdkSurface *surface)
{
if (GDK_SURFACE_DESTROYED (surface) ||
- !SURFACE_IS_TOPLEVEL_OR_FOREIGN (surface))
+ !SURFACE_IS_TOPLEVEL (surface))
return;
if (GDK_SURFACE_IS_MAPPED (surface))
gdk_x11_surface_unmaximize (GdkSurface *surface)
{
if (GDK_SURFACE_DESTROYED (surface) ||
- !SURFACE_IS_TOPLEVEL_OR_FOREIGN (surface))
+ !SURFACE_IS_TOPLEVEL (surface))
return;
if (GDK_SURFACE_IS_MAPPED (surface))
gdk_x11_surface_apply_fullscreen_mode (GdkSurface *surface)
{
if (GDK_SURFACE_DESTROYED (surface) ||
- !SURFACE_IS_TOPLEVEL_OR_FOREIGN (surface))
+ !SURFACE_IS_TOPLEVEL (surface))
return;
/* _NET_WM_FULLSCREEN_MONITORS gives an indication to the window manager as
gdk_x11_surface_fullscreen (GdkSurface *surface)
{
if (GDK_SURFACE_DESTROYED (surface) ||
- !SURFACE_IS_TOPLEVEL_OR_FOREIGN (surface))
+ !SURFACE_IS_TOPLEVEL (surface))
return;
if (GDK_SURFACE_IS_MAPPED (surface))
GdkRectangle geom;
if (GDK_SURFACE_DESTROYED (surface) ||
- !SURFACE_IS_TOPLEVEL_OR_FOREIGN (surface))
+ !SURFACE_IS_TOPLEVEL (surface))
return;
gdk_monitor_get_geometry (monitor, &geom);
gdk_x11_surface_unfullscreen (GdkSurface *surface)
{
if (GDK_SURFACE_DESTROYED (surface) ||
- !SURFACE_IS_TOPLEVEL_OR_FOREIGN (surface))
+ !SURFACE_IS_TOPLEVEL (surface))
return;
if (GDK_SURFACE_IS_MAPPED (surface))
g_return_if_fail (GDK_IS_SURFACE (surface));
if (GDK_SURFACE_DESTROYED (surface) ||
- !SURFACE_IS_TOPLEVEL_OR_FOREIGN (surface))
+ !SURFACE_IS_TOPLEVEL (surface))
return;
if (GDK_SURFACE_IS_MAPPED (surface))
g_return_if_fail (GDK_IS_SURFACE (surface));
if (GDK_SURFACE_DESTROYED (surface) ||
- !SURFACE_IS_TOPLEVEL_OR_FOREIGN (surface))
+ !SURFACE_IS_TOPLEVEL (surface))
return;
if (GDK_SURFACE_IS_MAPPED (surface))
MotifWmHints hints;
if (GDK_SURFACE_DESTROYED (surface) ||
- !SURFACE_IS_TOPLEVEL_OR_FOREIGN (surface))
+ !SURFACE_IS_TOPLEVEL (surface))
return;
/* initialize to zero to avoid writing uninitialized data to socket */
gboolean result = FALSE;
if (GDK_SURFACE_DESTROYED (surface) ||
- !SURFACE_IS_TOPLEVEL_OR_FOREIGN (surface))
+ !SURFACE_IS_TOPLEVEL (surface))
return FALSE;
hints = gdk_surface_get_mwm_hints (surface);
g_return_if_fail (GDK_IS_SURFACE (surface));
if (GDK_SURFACE_DESTROYED (surface) ||
- !SURFACE_IS_TOPLEVEL_OR_FOREIGN (surface))
+ !SURFACE_IS_TOPLEVEL (surface))
return;
/* initialize to zero to avoid writing uninitialized data to socket */
guint32 timestamp)
{
if (GDK_SURFACE_DESTROYED (surface) ||
- !SURFACE_IS_TOPLEVEL_OR_FOREIGN (surface))
+ !SURFACE_IS_TOPLEVEL (surface))
return;
/* Avoid EWMH for touch devices */